﻿/// <reference path="~/javascript/jquery-1.3.js" />

function validateInput(input) {
	return input != null && input.attr("value").length > 0;
}

function IsSilverlightInstalled() {
    return window.Silverlight != null && (Silverlight.isInstalled('2.0') || Silverlight.isInstalled('3.0'));
}

function showShadowboxImage(url)
{
    var sb = Shadowbox != null ? Shadowbox : window.parent.Shadowbox;        
    sb.open({player: 'img', content: url}, {animate:false, animateFade:false}); 
}
   

function showSubType(hidElement, id, path, time)
{
	$get("prepareTime").innerHTML = time;

	if ($get("imgSubOverview") != null)
        $get("imgSubOverview").src = path;

    $get(hidElement).value = id;
}



function showMap(id){
    if ($get("bigMap"+id).style.display=='block')
        $get("bigMap"+id).style.display='none';
    else    
        $get("bigMap"+id).style.display='block';

    return false;
}

function selectListElement(groupName,selectedId)
{
	var groupElements = document.getElementsByName(groupName);

	for (i=0;i<groupElements.length;i++)
	{
		groupElements[i].parentNode.className="";
		groupElements[i].selected = false;

		if (groupElements[i].id == selectedId)
			$("#" + selectedId).attr("checked", "checked");
		else
			groupElements[i].removeAttribute("checked");
    }

	if (document.getElementById(selectedId) != null) {
		document.getElementById(selectedId).click();
		if (document.getElementById(selectedId).parentNode != null)
			document.getElementById(selectedId).parentNode.className = "selected";
    }
}

var fadeElem = null;
var timerFadeImage,stepFadeImage=100;

function fadeImage()
{	
	stepFadeImage=100;
	fadeElem = $get('currentFile');
	timerFadeImage=setInterval("fadeOut()", 10);
}

function filterNumericText(e)
{     
    var el=(e.which==null)?e.keyCode:e.which;
    return (el==0) || (el >= 4 && el <= 57 && el != 45) ? true : false;
}

function fadeOut()
{

	if(fadeElem.style.MozOpacity != null){fadeElem.style.MozOpacity=stepFadeImage/100;}
	else{fadeElem.style.filter="alpha(opacity="+stepFadeImage+")"}

	stepFadeImage -= 10;

	if (stepFadeImage <40) {clearInterval(timerFadeImage);}
}


function materialQuantity(id,quantity){this.id=id;this.quantity=quantity;}

function printMaterial(id,name,price,width,height) 
{
	this.id=id;
	this.name=name;
	this.price=price;
	this.width=width;
	this.height=height;
	this.IsNormalQuality = printMaterial_IsNormalQuality;
}

function printMaterial_IsNormalQuality(fileWidth, fileHeight) {
    var k1 = parseFloat(this.width / this.height);
    var k2 = parseFloat(fileWidth / fileHeight);

    if ((k1 > 1 && k2 < 1) || (k1 < 1 && k2 > 1)) {
        var temp = fileWidth;
        fileWidth = fileHeight;
        fileHeight = temp;
    }

    var quality = fileWidth >= this.width && fileHeight >= this.height;

    return quality;
}

function printFile(id,width,height,materialsCount) 
{	
	this.id=id;
	this.width = width;
	this.height = height;
	this.materialsOrder=new Array();
	this.materials = new Hashtable();

	for (i=0;i<materialsCount.length;i++)
	{
		this.materialsOrder.push(materialsCount[i].id);
		this.materials.put(materialsCount[i].id,materialsCount[i].quantity);
	}

	this.addMaterial=printFile_addmaterial;
	this.removeMaterial=printFile_removematerial;
	this.changeQuantity=printFile_changeQuantity;
	this.render=printFile_render;
	this.changeMaterial=printFile_changeMaterial;
}

function printFile_changeMaterial(oldId,newId) {
	this.removeMaterial(oldId,true);
	this.addMaterial(newId);
	totalTableChanged(true);
}

function printFile_changeQuantity(mid,value)
{
	var txt=$get("txt_"+this.id+"_"+mid);
	this.materials.put(mid,value);

	if (this.materials.get(mid)<1)this.materials.put(mid,1);
	else if(this.materials.get(mid)>99)this.materials.put(mid,99);

	txt.value=this.materials.get(mid);
	totalTableChanged(true);
}

function printFile_removematerial(mid,changing)
{
	var newOrder=new Array();

	for (i=0;i<this.materialsOrder.length;i++)
		if (this.materialsOrder[i]!=mid) newOrder.push(this.materialsOrder[i]);

	if ((typeof(changing)!="undefined" && changing==true) || newOrder.length>0)
	{
		this.materialsOrder=newOrder;
		this.materials.remove(mid);
		totalTableChanged(true);
	}
	else
	{
		alert(confirmRemoveFormat);
	}	
}	

function printFile_addmaterial(mid,keepOrder)
{
	var index=0;

	if(typeof(mid)=="undefined")
	{
		var select=$get("f_"+this.id);

		if (select.options.length>select.selectedIndex+1)
			index = select.options[select.selectedIndex+1].value;
		else
		{
			index = select.options[select.selectedIndex-1].value;
		}
	}
	else index=mid;

	this.materialsOrder.push(index);
	this.materials.put(index,1);
	totalTableChanged(true);
}

function printFile_render()
{
	var formatContainer=$get("tb_"+this.id);

	while(formatContainer.firstChild!=null)formatContainer.removeChild(formatContainer.firstChild);

	for (i=0;i<this.materialsOrder.length;i++)
	{
		var fid = this.id, mid = this.materialsOrder[i];

		var row = document.createElement("tr");
		row.id = "tr_"+fid+"_"+mid;

		var td=document.createElement("td");
		var div=document.createElement("div");

		div.className = "relative";
		if ($("#renderType") != null && $("#renderType").attr("value") == "wide")
		    div.style.width = "100%";

		var span = document.createElement("span");
		span.setAttribute("class", "caution");

		var img = document.createElement("img"); img.id = "q_" + fid + "_" + mid; img.className = "Enabled"; img.src = "../../content/images/caution.gif";
		img.className = printMaterials.get(mid).IsNormalQuality(getFileById(fid).width, getFileById(fid).height) ? "Disabled" : "Enabled";
		span.appendChild(img);

		td.appendChild(span);

		var select, selectedIndex = 0;

		if (i==this.materialsOrder.length-1)
		{
			select = document.createElement("select");select.id="f_"+fid;select.name="f_"+fid;

			var ids=new Array(),k=0;

			for (j=0;j<printMaterials.keys().length;j++)if(!this.materials.containsKey(printMaterials.keys()[j]) || mid==printMaterials.keys()[j])ids[k++]=printMaterials.keys()[j];
		
			if (ids.length>1)
			{
				for (j=0;j<ids.length;j++)
				{
					var option=document.createElement("option");

					option.id="o_"+fid+"_"+ids[j];option.name=option.id;option.value=ids[j];option.innerHTML=printMaterials.get(ids[j]).name;
					select.appendChild(option);

					if (ids[j] == mid)selectedIndex=j;
				}

				div.appendChild(select);
			}
			else
			{
				var text=document.createTextNode(printMaterials.get(mid).name);
				div.appendChild(text);
			}			
		}
		else
		{
			var text=document.createTextNode(printMaterials.get(mid).name);
			div.appendChild(text);
		}

		td.appendChild(div);
						
		var td2=document.createElement("TD");
		var div=document.createElement("DIV");
		div.className="quantity";
		var up=document.createElement("A");
		up.title=increaseNote;up.className="up";up.href="#"+mid;
		var down=up.cloneNode(false);
		down.title=decreaseNote;down.className="down";down.href="#"+mid;
		var input=document.createElement("INPUT");
		input.type="text";input.id="txt_"+fid+"_"+mid;input.name=input.id;input.value=1;
		input.value=this.materials.get(mid);

		up.onclick=function(){changeQuantity(1,fid,parseInt(this.href.split('#')[1]));return false;};
		down.onclick=function(){changeQuantity(-1,fid,parseInt(this.href.split('#')[1]));return false;};
		div.appendChild(up);div.appendChild(down);div.appendChild(input);

		if (window.location.href.indexOf("restoration") > 0)
		    td2.style.display = "none";

		td2.appendChild(div); 

		var td3=document.createElement("TD");
		var del=document.createElement("a");del.href="#"+mid;del.className="delete";del.innerHTML=removeNote;

		del.id = "d_" + fid + "_" + mid;

		if (window.location.href.indexOf("restoration") > 0)
		    td3.style.display = "none";

		td3.appendChild(del);
	
		row.appendChild(td); row.appendChild(td2); row.appendChild(td3);

		formatContainer.appendChild(row);

		if ($("#renderType") != null && $("#renderType").attr("value") == "wide") {
		    td.style.width = "100%";
		}
		else {
		    td.style.width = "150px";
		}
		select = $get("f_" + fid);

		if (select!=null) {
		    if ($("#renderType") != null && $("#renderType").attr("value") == "wide")
		        select.style.width = "100%";

			select.onchange=function(){materialChanged(select,fid,mid);};
			select.selectedIndex=selectedIndex;
		}	

		input=$get("txt_"+fid+"_"+mid);input.maxLength="2";
		input.onkeypress = function(event){return filterNumericText(event);};
		input.onkeyup=function(){var ids=this.id.split('_');var f_id=parseInt(ids[1]);var m_id=parseInt(ids[2]);setQuantity(parseInt(this.value),f_id,m_id);};
		del.onclick=function(){removeMaterial(fid,parseInt(parseInt(this.href.split('#')[1])));return false;};
    }

    if ($get("addFormat_" + this.id) != null) {
        if (this.materialsOrder.length == printMaterials.keys().length) $get("addFormat_" + this.id).style.display = "none";
        else $get("addFormat_" + this.id).style.display = "block";
    }
}

function Hashtable(){
    this.clear = hashtable_clear;
    this.containsKey = hashtable_containsKey;
    this.containsValue = hashtable_containsValue;
    this.get = hashtable_get;
    this.isEmpty = hashtable_isEmpty;
    this.keys = hashtable_keys;
    this.put = hashtable_put;
    this.remove = hashtable_remove;
    this.size = hashtable_size;
    this.toString = hashtable_toString;
    this.values = hashtable_values;
    this.hashtable = new Array();
}

function hashtable_clear(){
    this.hashtable = new Array();
}

function hashtable_containsKey(key){
    var exists = false;

    for (var i in this.hashtable) {
        if (i == key && this.hashtable[i] != null) {
            exists = true;
            break;
        }
    }

    return exists;
}

function hashtable_containsValue(value){
    var contains = false;

    if (value != null) {
        for (var i in this.hashtable) {
            if (this.hashtable[i] == value) {
                contains = true;
                break;
            }
        }
    }

    return contains;
}

function hashtable_get(key){
    return this.hashtable[key];
}

function hashtable_isEmpty(){
    return (parseInt(this.size()) == 0) ? true : false;
}

function hashtable_keys(){
    var keys = new Array();

    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            keys.push(i);
    }

    return keys;
}

function hashtable_put(key, value){
    if (key == null || value == null) {
        throw "NullPointerException {" + key + "},{" + value + "}";
    }else{
        this.hashtable[key] = value;
    }
}

function hashtable_remove(key){
    var rtn = this.hashtable[key];
    this.hashtable[key] = null;
    return rtn;
}

function hashtable_size(){
    var size = 0;
    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            size ++;
    }

    return size;
}

function hashtable_toString(){
    var result = "";
    for (var i in this.hashtable)
    {     
        if (this.hashtable[i] != null)
            result += "{" + i + "},{" + this.hashtable[i] + "}\n";  
    }

    return result;
}

function hashtable_values(){
    var values = new Array();
    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            values.push(this.hashtable[i]);
    }

    return values;
}
