/* til visning af previewlaget */

function HidePreview()
{
    var temp1 = document.getElementById("PreviewLayerDark");
    var temp2 = document.getElementById("PreviewLayerContent");
    
    temp1.style.visibility = "hidden";
    temp1.style.display = "none";
    temp2.style.visibility = "hidden";
    temp2.style.display = "none";
    HidePreviewImage();
    HidePreviewVideo();
}
function HidePreview2()
{
    var tblPreview = document.getElementById("tblPreview");
    if(isMouseClickWithinObject(tblPreview)) {
	
    var temp1 = document.getElementById("PreviewLayerDark");
    var temp2 = document.getElementById("PreviewLayerContent");
    
    temp1.style.visibility = "hidden";
    temp1.style.display = "none";
    temp2.style.visibility = "hidden";
    temp2.style.display = "none";
    HidePreviewImage();
    HidePreviewVideo();
    }
}
function isMouseClickWithinObject(obj) {
	var posx = 0;
	var posy = 0;
	if (!e) 
	    var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	var objX = findPosX(obj);
	var objY = findPosY(obj);
	if(posx > objX && posx < objX+obj.offsetWidth && posy > objY && posy < objY+obj.offsetHeight)
	    return false;
	return true;
}
  function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }


function ShowPreview2(itemid)
{
    window.open('url to open','window name','attribute1,attribute2');
}

function ShowPreview(itemid, previewHeight)
{
    HidePreviewScreen();

    var previewLayerDark = $("#PreviewLayerDark").get(0);
    var previewLayerContent = $("#PreviewLayerContent").get(0);


    previewLayerDark.style.visibility = "visible";
    previewLayerDark.style.display = "block";
    previewLayerContent.style.visibility = "visible";
    previewLayerContent.style.display = "block";
    previewLayerDark.style.top = 0;
    previewLayerContent.style.top = document.documentElement.scrollTop;
    
    // set the height of the dark box
    if( typeof( window.innerWidth ) == 'number' ) 
    {
        //Non-IE
        myHeight = window.innerHeight;
    } 
    else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
    {
        //IE 6+ in 'standards compliant mode'
        myHeight = document.documentElement.clientHeight;
    }
    previewLayerDark.style.height = document.documentElement.scrollHeight;

    previewLayerContent.style.height = previewHeight ? previewHeight : document.documentElement.clientHeight;
    ShowPreviewLoadScreen();
    
    RequestImageDetails(itemid);
}
function ResizePreviewWindow() {
    var previewLayerDark = $("#PreviewLayerDark").get(0);
    var previewLayerContent = $("#PreviewLayerContent").get(0);

    if (previewLayerDark && previewLayerContent) {
        previewLayerDark.style.height = 0;
        previewLayerDark.style.top = 0;
        previewLayerContent.style.top = 0;
        if (typeof (window.innerWidth) == 'number') {
            //Non-IE
            myHeight = window.innerHeight;
        }
        else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
        //IE 6+ in 'standards compliant mode'
        // use hightst of scroll or client height
        myHeight = document.documentElement.clientHeight;
        if (document.documentElement.scrollHeight > myHeight)
            myHeight = document.documentElement.scrollHeight;
        }

        previewLayerDark.style.height = myHeight;
        previewLayerContent.style.height = document.documentElement.scrollHeight;
    }
}


function ShowPreviewLoadScreen() {
    $("#PreviewLoadScreen").show();
//    var temp1 = document.getElementById("PreviewLoadScreen");
//    temp1.style.display = "block";
}

function HidePreviewLoadScreen() {
    $("#PreviewLoadScreen").hide();
//    var temp1 = document.getElementById("PreviewLoadScreen");
//    temp1.style.display = "none";
}

function ShowPreviewScreen() {
    $("#PreviewScreen").show();
//    var temp1 = document.getElementById("PreviewScreen");
//    temp1.style.display = "block";

    ResizePreviewWindow();

}

function HidePreviewScreen() {
    $("#PreviewScreen").hide();
//    var temp1 = document.getElementById("PreviewScreen");
//    temp1.style.display = "none";
}



//function ShowPreviewImage(path)
//{
//  var img = document.getElementById();
//  img.src = path;
//}

/* xml utils */

function getXmlDoc(xmltext)
{
    var xmlDoc = null;

    if (window.ActiveXObject)
    {// code for IE
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.loadXML(xmltext);
    }
    else if (document.implementation.createDocument)
    {// code for Mozilla, Firefox, Opera, etc.
        xmlDoc = document.implementation.createDocument("","",null);
        
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmltext,"text/xml");
    }
    else
    {
        alert('Your browser cannot handle this script');
    }

    try
    {    
        if (xmlDoc != null)
        { 
            xmlDoc.async = false;
        }
    }
    catch (e)
    {
        alert('error: ' + e.message);
    }
    
    return xmlDoc;
}

function getXmlDoc2(xmltext)
{
    var xmlDoc = null;
    
    try //Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmltext);
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
  
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(xmltext,"text/xml");
        }
        catch(e)
        {
            alert(e.message);
        }
    }
    
    return xmlDoc;
}

function WriteHTML(label,value)
{
    return '<div class="Label">' + label + '</div>' + '<div class="Value">' + value + '</div>';
    }
function WriteHTMLAsTable(label,value, index, colums)
{
    var result = "";
    if(index % colums == 0) {
        result += "<tr>";
    }
        result += "<td class='imagedetailLabel'>" + label + "</td><td class='imagedetailValue'>" + value + "</td>";
    if(index % colums == 1){
        result += "</tr>";
    }
    return result;
}

//NB. Table output will only be proper when there is a equal amount of properties, and two colums
function WriteImageDetails(input,output)
{
    var s = "<table class='imageDetailTable'>";
    var temp =input.split("|~|");
    var index = 1;
    var kv = null;
    
    // ArticleNumber
    s += WriteHTMLAsTable("ID#", temp[index++], index, 2);
    
    s += WriteHTMLAsTable("&nbsp;", temp[index++], index, 2);

    // Filename    
    s += WriteHTMLAsTable("File name",temp[index++],index,2);

    // Filesize
    s += WriteHTMLAsTable("File size",temp[index++],index,2);

    // Fileformat
    s += WriteHTMLAsTable("File format",temp[index++],index,2);

    // Pixel
    s += WriteHTMLAsTable("Dimensions",temp[index++] + " pixel",index,2);

    // Resolution
    s += WriteHTMLAsTable("Resolution", temp[index++] + " dpi", index, 2);

    // Cm
    s += WriteHTMLAsTable("Dimensions", temp[index++] + " cm", index, 2);
    
    // Colorspace
    s += WriteHTMLAsTable("Colorspace", temp[index++], index, 2);
    
    // Keywords
    s += WriteHTMLAsTable("Search words",temp[index++],index,2);

    // Description
    s += WriteHTMLAsTable("Description", temp[index++], index, 2);
    
    // Description
    s += WriteHTMLAsTable("", "", index, 2);
    
    // Categories
    s += "<tr class='detaillabel_categories'><td class='imagedetailLabel'>Categories</td><td class='imagedetailValue' colspan='3'>" + temp[index++] + "</td></tr>"

    s+= "</table>"
    // Image
    ShowPreviewImage(temp[index++]);

    output.innerHTML = s;    
}

//NB. Table output will only be proper when there is a equal amount of properties, and two colums
function WriteVideoDetails(input, output) 
{
    var s = "<table class='imageDetailTable'>";
    var temp = input.split("|~|");
    var index = 1;
    var kv = null;
    
    // ArticleNumber
    s += WriteHTMLAsTable("ID#",temp[index++],index,2);
    
    // Filename    
    s += WriteHTMLAsTable("File name",temp[index++],index,2);

    // Filesize
    s += WriteHTMLAsTable("File size",temp[index++],index,2);


    // Fileformat

    // Pixel
    s += WriteHTMLAsTable("Dimensions",temp[index++],index,2);

    // Framerate
    //kv = temp[index++].split(":");
    //s += WriteHTML("Framerate",kv[1] + " img/sec");

    // Bit rate
    
    // Codec
    
    // Keywords
    s += WriteHTMLAsTable("Search words",temp[index++],index,2);


    // Description
    s += WriteHTMLAsTable("Description", temp[index++], index, 2);
    
    // Categories
    s += "<tr class='detaillabel_categories'><td class='imagedetailLabel'>Categories</td><td class='imagedetailValue' colspan='3'>" + temp[index++] + "</td></tr>"
    
    // Flash video
    kv = temp[index++].split(":::");

    output.innerHTML = s;

    ShowPreviewVideo(kv[1]);
}

//NB. Table output will only be proper when there is a equal amount of properties, and two colums
function WriteDocumentDetails(input, output)
{
    var s = "<table class='imageDetailTable'>";
    var temp = input.split("|~|");
    var index = 1;
    var kv = null;
    
    // ArticleNumber
    s += WriteHTMLAsTable("ID#",temp[index++],index,2);

    // Filename    
    s += WriteHTMLAsTable("File name",temp[index++],index,2);

    // Filesize
    s += WriteHTMLAsTable("File size",temp[index++],index,2);


    // Fileformat
    s += WriteHTMLAsTable("File format",temp[index++],index,2);


    // Keywords
    s += WriteHTMLAsTable("Search words",temp[index++],index,2);


    // Description
    s += WriteHTMLAsTable("Description", temp[index++], index, 2);

    // Categories
    s += "<tr class='detaillabel_categories'><td class='imagedetailLabel'>Categories</td><td class='imagedetailValue' colspan='3'>" + temp[index++] + "</td></tr>"
    
    s+= "</table>"

    // Image
    ShowPreviewImage(temp[index++]);
    output.innerHTML = s;    
}

function ShowPreviewImage(path)
{
    HidePreviewVideo();
    var img = $("#imgPreviewDetails");
    img.show();
    img.attr("src", path);
//    var img = $("imgPreviewDetails");
//    img.style.display = "block";
//    img.src = path;
}
function HidePreviewImage() {

    var img = $("#imgPreviewDetails");
    img.hide();
    img.attr("src", "/images/skin/SkinPreviewLoading.gif");
    
//    var img = $("imgPreviewDetails");
//    img.style.display = "none";
//    img.src = "/images/skin/SkinPreviewLoading.gif";
}
function ShowPreviewVideo(html)
{
    HidePreviewImage();
    var div = document.getElementById("videoPreviewDetails");
    // the javscript part in html won't be parse by the browser if set by .innerHTML (innerhtml is 'text only')
    // setHTML creates new functions and the browser acts correct.
    setHTML(div, html);
    
}
function HidePreviewVideo() 
{
    var div = document.getElementById("videoPreviewDetails");
    div.innerHTML = "";
}


function WriteImageCategories(input)
{
    
}



var detailreq = getXmlHttpRequestObject();

function RequestImageDetails(itemid)
{	
    if (detailreq.readyState == 4 || detailreq.readyState == 0) 
    {		
        detailreq.open("GET", '../../ajaxtools/GetItemDetails.aspx?itemid=' + itemid, true);		
        detailreq.onreadystatechange = handleImageResponse; 		
        detailreq.send(null);	
    }		
}

function handleImageResponse() 
{	
    if (detailreq.readyState == 4) 
    {		
        var xmltext = detailreq.responseText;
        var div = document.getElementById("PreviewItemDetails");
        
        var temp = xmltext.split("|~|");
        if (temp[0] == "Photo")
            WriteImageDetails(xmltext,div);        
            
        if (temp[0] == "Document")
        {
            WriteDocumentDetails(xmltext,div);
        }
        if (temp[0] == "Video")
        {
            WriteVideoDetails(xmltext, div);
        }
        
        HidePreviewLoadScreen();
        ShowPreviewScreen();
    }
}


/* small preview - onmouseover */

function findPos(obj) 
{
    var curleft = curtop = 0;

    if (obj.offsetParent) 
    {
        do 
        {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        } 
        while (obj = obj.offsetParent);
    }
        
        
    var alocation = new ALocation(curleft,curtop);
    return alocation;        
}

function ShowSmallPreview(thumb)
{
    var smallpreview = document.getElementById("mouseoverpreview");
    var poss = findPos(thumb);
    
    smallpreview.style.left = poss.left;
    smallpreview.style.top = poss.top;
    
    smallpreview.style.visibility = "visible";
}

function HideSmallPreview()
{
    var smallpreview = document.getElementById("mouseoverpreview");
    smallpreview.style.visibility = "hidden";
}

function ALocation(aleft,atop)
{
    this.left = aleft;
    this.top = atop;
}

function setHTML(div,content) 
{ 
    var search = content; 
    var script; 
          
    var is_singleq = 0; var singleq = "'"; 
    var is_doubleq = 0; var doubleq = '"'; 
    var is_escaped = 0; var escap = "\\"; 
    var layer = 0; 
                
    while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/)) { 
        search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length); 
        if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) 
            break; 
        block = search.substr(0, search.indexOf(RegExp.$1)); 
        search = search.substring(block.length + RegExp.$1.length); 
         
        while(func = block.match(/(function(.+?)\((.*?)\)\s*\{)/)) { 
            eval(block.substr(0,block.indexOf(RegExp.$1))); 
            // for evaluating non functions 
            
            block = block.substr(block.indexOf(RegExp.$1) + RegExp.$1.length); 
            name = RegExp.$2; 
            param = RegExp.$3; 
            
            is_singleq = 0; 
            is_doubleq = 0; 
            is_escaped = 0; 
            layer = 0; 
            
            
            for(i=0;i<block.length;i++) { 
                c = block.substr(i,1); 
               
                if ((is_singleq || is_doubleq) && is_escaped)
                 is_escaped = 0; 
                else if (!is_doubleq && (c==singleq))
                 is_singleq = !is_singleq; 
                else if (!is_singleq && (c==doubleq))
                 is_doubleq = !is_doubleq; 
                else if ((is_singleq || is_doubleq) && (c==escap))
                 is_escaped = 1; 
                else if ( c=="{")
                 layer++; 
                else if ( c=="}") { 
                    if ( layer==0 ) { 
                        break; 
                    } 
                    layer--; 
                } 
            } 
            
            code = block.substr(0,i-1); 
            block = block.substr(i +1); 

            code = code.replace(/\n/g, '\\n'); 
            code = code.replace(/\r/g, '\\r'); 
            code = code.replace(/'/g,"\\'"); 

            eval(name + " = new Function('"+param+"','"+code+"');"); 
        } 
        eval(block); // for evaluating non functions 
    } 
    div.innerHTML=content; 
}
