﻿/// <reference path="~/javascript/jquery-1.3.js" />

function IsSilverlightInstalled() {
    return window.Silverlight != null && (Silverlight.isInstalled('2.0') || Silverlight.isInstalled('3.0'));
}

//text layer editor
$(".TextPanel textarea").live("keydown", function() {
    updateLayerText($(this)[0].id, $(this).parent().find("input[type=hidden]")[0].id);
});

var textTimeoutID = 0;
var prevPosition = 0;
function updateLayerText(textFieldId, hiddenFieldId) {
    prevPosition = getCarretPosition($get(textFieldId)) + 1;
    clearTimeout(textTimeoutID);
    textTimeoutID = setTimeout(function() {
        shortcut.add("backspace", function() { });
        $("#" + hiddenFieldId).val($("#" + textFieldId).val());
        $("#" + textFieldId).attr("disabled", "disabled");
        $('.TextPanel .updateText').css("visibility", "visible");
        __doPostBack(hiddenFieldId, '');
    }, 1000);
}
function afterLayerTextUpdate(textFieldId) {
    $("#" + textFieldId).attr("disabled", "");
    $('.TextPanel .updateText').css("visibility", "hidden");
    setTimeout(function() {
        shortcut.remove('backspace');
        setCaretTo($get(textFieldId), prevPosition);
    }, 50);
}
function getCarretPosition(obj) {
    if (document.selection && navigator.userAgent.indexOf("MSIE") >= 0) {
        var range = document.selection.createRange();
        var stored_range = range.duplicate();
        stored_range.moveToElementText(obj);
        stored_range.setEndPoint('EndToEnd', range);
        obj.selectionStart = stored_range.text.length - range.text.length;
        obj.selectionEnd = obj.selectionStart + range.text.length;
        return obj.selectionStart;
    } else if (obj.selectionStart) { return obj.selectionStart; }
    else { return 5000; }
}
function setCaretTo(obj, pos) {try {if (obj.createTextRange) { var range = obj.createTextRange(); range.move("character", pos); range.select(); }else if (obj.selectionStart) { obj.focus(); obj.setSelectionRange(pos, pos); }}catch (e){ }}
//end text layer editor


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 updateBottom(){}
function selectListElement(groupName,selectedId)
{
	var groupElements = document.getElementsByName(groupName);
	for (i=0;i<groupElements.length;i++)
	{
		groupElements[i].parentNode.className="";
		groupElements[i].selected = false;
	}
	$get(selectedId).click();$get(selectedId).parentNode.className="selected";
	updateBottom();
}

var fadeElem = null;
var timerFadeImage,stepFadeImage=100;
function fadeImage()
{	
	stepFadeImage=100;
	fadeElem = $get('currentFile');
	timerFadeImage=setInterval("fadeOut()", 25);
}

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 hover(eventElement) {eventElement.className = "hover";}
function unHover(eventElement) {eventElement.className = "";}

function flick(id)
{
	var obj = document.getElementById(id);
	if (obj != null)
	{
		if (obj.className == null || obj.className == "")
			obj.className = "highlight";
		else
			obj.className = "";
	}
}

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.GetFileQuality = printMaterial_GetFileQuality;
	this.qualityCoefficient = 0.3; //1.3;
}
function printMaterial_GetFileQuality(fileWidth, fileHeight)
{
	var quality = ((this.width > fileWidth * this.qualityCoefficient) || (this.height > fileHeight * this.qualityCoefficient))
    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";
			
		var img=document.createElement("img");img.id="q_"+fid+"_"+mid;img.className="Enabled";img.src="../../images/caution.gif";
		img.className=printMaterials.get(mid).GetFileQuality(getFileById(fid).width,getFileById(fid).height)?"Enabled":"Disabled";
		div.appendChild(img);
		
		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);		
		td.style.width="90px";

		select = $get("f_"+fid);
		if (select!=null)
		{
			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;
}

function getFlashVersion()
{
    var flashversion = 0;    
    if (navigator.plugins && navigator.plugins.length)
    {
	    var x = navigator.plugins["Shockwave Flash"];
	    if (x)
	    {
		    if (x.description)
		    {
			    y = x.description;
			    flashversion = y.charAt(y.indexOf('.')-1);
			    if (x.description.indexOf('r16') > 0)
			        flashversion = 8;
		    }
	    }
	    if (navigator.plugins["Shockwave Flash 2.0"])
	    {
		    flashversion = 2;
	    }
    }
    else
    {
	    for(var i=10; i>0; i--)
	    {	        
		    flashversion = 0;
		    try
		    {
			    var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
			    if (i == 9)
			    {
			        if (flash.GetVariable("$version").indexOf('9,0,16') < 0)
			            flashversion = i;    
			    }
			    else
			        flashversion = i;    
			        
			    break;
		    }
		    catch(e){}
	    }
    }    
    
    return flashversion;
}

var Sidebar = function (id, position) {this.initSidebar(id, position);};
Sidebar.SlideStep = 12;
Sidebar.SlideSpeed = 24;
Sidebar.Width = 84;

Sidebar.prototype.initSidebar = function (id, position) {
	try {
		this.id = id;
		this.position = position;
		var container = document.getElementById("container");
		var sidebar = document.getElementById(this.id);
		sidebar.parentNode.removeChild(sidebar);
		
		this.isShown = false;
		
		if (this.position == 0) // right side
		{
			this.positionVisible=document.getElementById("container").offsetWidth;
			this.positionHidden=document.getElementById("container").offsetWidth - Sidebar.Width;
			sidebar.style.left = this.positionHidden + "px";
		}
		else // left side
		{
			this.positionVisible=-Sidebar.Width;
			this.positionHidden=0;
			sidebar.style.left = this.positionHidden + "px";
		}	
		
		container.insertBefore(sidebar,container.childNodes[0]);	
		this.sidebarObject = document.getElementById(this.id);
		this.sidebarContent = document.getElementById(this.id+"_content");	
		this.slideIntervalID = 0;
	} catch (ex) {
		throw ex;
	}
};

Sidebar.prototype.slide = function (step)
{
	var left=parseInt(this.sidebarObject.offsetLeft,10);
	if (this.position==0 && Math.abs(left)<Math.abs(this.positionVisible-step) && Math.abs(left)>Math.abs(this.positionHidden-step) ||
		this.position==1 && Math.abs(left)<Math.abs(this.positionVisible)+step && Math.abs(left)>Math.abs(this.positionHidden)+step)
	{
		this.sidebarObject.style.left = (left+step)+"px";
	}
	else
	{
		clearInterval(this.slideIntervalID);
		if (Math.abs(left)>=Math.abs(this.positionVisible-step)) this.sidebarObject.style.left = this.positionVisible+"px";
		else if (Math.abs(left)<=Math.abs(this.positionHidden-step)) this.sidebarObject.style.left = this.positionHidden+"px";
		this.sidebarContent.style.visibility = "visible";
		if (this.isShown == false)
		{
			this.sidebarContent.parentNode.parentNode.parentNode.style.display="none";
		}
	}
}

Sidebar.prototype.Show = function ()
{
	if (this.isShown==false)
	{
		this.sidebarObject.style.display="block";
		this.sidebarContent.style.visibility = "hidden";
		clearInterval(this.slideIntervalID);
		var oSelf = this;
		var step = this.position==0?Sidebar.SlideStep:-Sidebar.SlideStep;
		this.slideIntervalID = setInterval(function () {oSelf.slide(step);}, Sidebar.SlideSpeed);
		this.isShown = true;
	}
}
Sidebar.prototype.Hide = function ()
{
	if (this.isShown = true)
	{
		this.sidebarContent.style.visibility = "hidden";
		clearInterval(this.slideIntervalID);
		var oSelf = this;
		var step = this.position==0?-Sidebar.SlideStep:Sidebar.SlideStep;
		this.slideIntervalID = setInterval(function () {oSelf.slide(step);}, Sidebar.SlideSpeed);
		this.isShown = false;
	}
}

function startProcess(button)
{
	$get('uploadProgress').style.display="block";
	button.parentNode.className = "ok-disabled";
	button.onclick = new function(){return false;}
	return true;
}

shortcut = {
	'all_shortcuts':{},//All the shortcuts are stored in this array
	'add': function(shortcut_combination,callback,opt) {
		//Provide a set of default options
		var default_options = {
			'type':'keydown',
			'propagate':false,
			'disable_in_input':false,
			'target':document,
			'keycode':false
		}
		if(!opt) opt = default_options;
		else {
			for(var dfo in default_options) {
				if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
			}
		}

		var ele = opt.target
		if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
		var ths = this;
		shortcut_combination = shortcut_combination.toLowerCase();

		//The function to be called at keypress
		var func = function(e) {
			e = e || window.event;
			
			if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
				var element;
				if(e.target) element=e.target;
				else if(e.srcElement) element=e.srcElement;
				if(element.nodeType==3) element=element.parentNode;

				if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
			}
			if (e.keyCode) code = e.keyCode;
			else if (e.which) code = e.which;
			var character = String.fromCharCode(code).toLowerCase();
			
			if(code == 188) character=",";
			if(code == 190) character=".";
	
			var keys = shortcut_combination.split("+");
			var kp = 0;
			
			var shift_nums = {"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":":","'":"\"",",":"<",".":">","/":"?","\\":"|"}
			var special_keys = {
				'esc':27,'escape':27,'tab':9,'space':32,'return':13,'enter':13,'backspace':8,
				'scrolllock':145,'scroll_lock':145,'scroll':145,'capslock':20,'caps_lock':20,'caps':20,'numlock':144,'num_lock':144,'num':144,
				'pause':19,'break':19,				
				'insert':45,'home':36,'delete':46,'end':35,
				'pageup':33,'page_up':33,'pu':33,
				'pagedown':34,'page_down':34,'pd':34,
				'left':37,'up':38,'right':39,'down':40,
				'f1':112,'f2':113,'f3':114,'f4':115,'f5':116,'f6':117,'f7':118,'f8':119,'f9':120,'f10':121,'f11':122,'f12':123
			}
	
			var modifiers = { 
				shift: { wanted:false, pressed:false},
				ctrl : { wanted:false, pressed:false},
				alt  : { wanted:false, pressed:false},
				meta : { wanted:false, pressed:false}	//Meta is Mac specific
			};
                        
			if(e.ctrlKey)	modifiers.ctrl.pressed = true;
			if(e.shiftKey)	modifiers.shift.pressed = true;
			if(e.altKey)	modifiers.alt.pressed = true;
			if(e.metaKey)   modifiers.meta.pressed = true;
                        
			for(var i=0; k=keys[i],i<keys.length; i++) {
				//Modifiers
				if(k == 'ctrl' || k == 'control') {
					kp++;
					modifiers.ctrl.wanted = true;

				} else if(k == 'shift') {
					kp++;
					modifiers.shift.wanted = true;

				} else if(k == 'alt') {
					kp++;
					modifiers.alt.wanted = true;
				} else if(k == 'meta') {
					kp++;
					modifiers.meta.wanted = true;
				} else if(k.length > 1) { //If it is a special key
					if(special_keys[k] == code) kp++;
					
				} else if(opt['keycode']) {
					if(opt['keycode'] == code) kp++;

				} else { //The special keys did not match
					if(character == k) kp++;
					else {
						if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
							character = shift_nums[character]; 
							if(character == k) kp++;
						}
					}
				}
			}

			if(kp == keys.length && 
						modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
						modifiers.shift.pressed == modifiers.shift.wanted &&
						modifiers.alt.pressed == modifiers.alt.wanted &&
						modifiers.meta.pressed == modifiers.meta.wanted) {
				callback(e);
	
				if(!opt['propagate']) { //Stop the event
					//e.cancelBubble is supported by IE - this will kill the bubbling process.
					e.cancelBubble = true;
					e.returnValue = false;
	
					//e.stopPropagation works in Firefox.
					if (e.stopPropagation) {
						e.stopPropagation();
						e.preventDefault();
					}
					return false;
				}
			}
		}
		this.all_shortcuts[shortcut_combination] = {
			'callback':func, 
			'target':ele, 
			'event': opt['type']
		};
		//Attach the function with the event
		if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
		else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
		else ele['on'+opt['type']] = func;
	},

	//Remove the shortcut - just specify the shortcut and I will remove the binding
	'remove':function(shortcut_combination) {
		shortcut_combination = shortcut_combination.toLowerCase();
		var binding = this.all_shortcuts[shortcut_combination];
		delete(this.all_shortcuts[shortcut_combination])
		if(!binding) return;
		var type = binding['event'];
		var ele = binding['target'];
		var callback = binding['callback'];

		if(ele.detachEvent) ele.detachEvent('on'+type, callback);
		else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
		else ele['on'+type] = false;
	}
}

